iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0

挑戰賽終於來到第十四天了。好像開始感受到腦袋不知道要寫些什麼的感覺了XD

這次來談談middleware,當初在學Laravel的時候其實花了好多時間去搞他到底想要完成什麼。

太深的理論概念我說不出來,但我可以用我理解過的方式分享給大家。

我們自己網路體驗中都知道當我們登入過後,可以訪問個人頁面。

如果在還沒登入的狀況下,我們就去訪問那個網址,通常都會導向到登入頁面或者註冊頁面之類的。

這就是一個很好解釋middleware的例子。

我們必須完成什麼條件,才能夠夠訪問某個API。

當然我們也可以是多層的就像洋蔥一樣,要一層一層剝開最後才能去訪問該API

有興趣的大家可以在搜尋 middleware 洋蔥圈,但我覺得沒很好理解就是了XD

回來剛剛這句話

我們必須完成什麼條件,才能夠夠訪問某個API。

也就是說,我們需要自己定義條件。

等等的例子我只會單純印出東西之後才能訪問該API

而那個印出東西的位置,就是未來你必須完成的商業邏輯的部份

上圖

midTest 也可以寫成這樣

function midTest(req, res, next){
  console.log('mid中介在這裡');
  next();
}

這只是題外話XD

OK經過上述很簡單的解釋,應該都能知道出現結果的順序是什麼了~

不知道沒關係,我印給你看,假設我去打test

這樣有感受到了嗎? 當我去打某一隻API之前,他會需要去看我middleware裡面做了什麼事情。

換句話說,我就能達到,我如果在未登入的狀態去打個人檔案的API,如果對方有寫好程式,那麼就很大機率會被你導向出來,或者提示你無權反問之類的。

那上述這個寫法,是針對這邊所有router都需要經過midTest的驗證。

我們再試試看另一隻/user的API吧~~

上圖

那麼如果我有兩層mid要驗證呢~?

這樣做就可以了

那麼可能不能API的需要的是不同的mid驗證呢?
在上圖~

這樣就可以了。

最後一個提供官網文件的寫法,我就懶得測試了。

這樣意思就是說我要打/example/c 這隻route

前面會經過 cb0 透過next() 進入到 cb1 next() 進入到主要程式邏輯

cb0 跟 cb1 都是mid哦。 cb2 則是商業邏輯了

之前Laravel把很多東西都包好了,很方便使用,使用起來沒那麼好體會這個流程。

在node.js上這方面驗證感覺很多都是要自己寫的,所以更有感覺了一點~

希望透過簡單的例子可以幫助你有初步的概念囉~

也另外提供
官網

這邊感覺有不少好用的套件,但我是還沒研究XD


上一篇
第十三天 箭頭函式
下一篇
第十五天 node如何接收前端的request
系列文
Node.js隨手札記 想到什麼就說什麼的30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言